# -*- coding: utf-8 -*-

import os
basedir = os.path.abspath(os.path.dirname(__file__))


class Config:
    # 密钥，建议在环境变量中指定
    SECRET_KEY = os.environ.get('SECRET_KEY') or '6difejo#)+bg6ccmt%%_qmt_(go8+v1u*zoz(1u53qgia^t=%y'
    # 数据库慢查询记录阀值
    SLOW_DB_QUERY_TIME = 10000
    # 开启自动提交
    SQLALCHEMY_COMMIT_ON_TEARDOWN = True
    # 记录查询
    SQLALCHEMY_RECORD_QUERIES = True
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    # 允许上传的后缀名
    ALLOWED_EXTENSIONS = set(['png', 'jpg', 'jpeg', 'gif'])
    # 日志文件路径
    LOG_FILE = os.path.join(basedir, 'flask-cmdb.log')
    # 禁用CSRF
    WTF_CSRF_CHECK_DEFAULT = False

    @staticmethod
    def init_app(app):
        pass


class DevelopmentConfig(Config):
    # 开发模式下开启debug
    DEBUG = True
    # 建议在环境变量中指定开发数据库
    SQLALCHEMY_DATABASE_URI = os.environ.get('DEV_DATABASE_URL') or \
        'sqlite:///' + os.path.join(basedir, 'data-dev.sqlite')


class TestingConfig(Config):
    # 开启测试模式
    TESTING = True
    # 建议在环境变量中指定测试数据库
    SQLALCHEMY_DATABASE_URI = os.environ.get('TEST_DATABASE_URL') or \
        'sqlite:///' + os.path.join(basedir, 'test-dev.sqlite')
    # 测试下关闭csrf
    WTF_CSRF_ENABLED = False


class ProductionConfig(Config):
    # 需要在环境变量中指定生产数据库地址，python3下mysql需采用mysql+pymysql://形式
    SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
        'sqlite:///' + os.path.join(basedir, 'data.sqlite')

    @classmethod
    def init_app(cls, app):
        Config.init_app(app)

        import logging
        from logging.handlers import SysLogHandler, RotatingFileHandler
        # 判断系统是window还是unix，如果是unix则开启syslog
        if os.name == 'nt':
            file_handler = RotatingFileHandler(Config.LOG_FILE)
            file_handler.setLevel(logging.WARNING)
            app.logger.addHandler(file_handler)
        elif os.name == 'posix':
            syslog_handler = SysLogHandler()
            syslog_handler.setLevel(logging.WARNING)
            app.logger.addHandler(syslog_handler)


config = {
    'development': DevelopmentConfig,
    'testing': TestingConfig,
    'production': ProductionConfig,
    # 默认开启的模式是开发模式
    'default': DevelopmentConfig
}